#pragma once

#ifdef _MSC_VER
    #ifdef LLIIO_PRIVATE
        #define LLIIO_API __declspec(dllexport)
    #else
        #define LLIIO_API __declspec(dllimport)
    #endif
#else
    #define LLIIO_API __attribute__ ((visibility ("default")))
#endif

#ifdef __cplusplus
extern "C"
{
#endif

/**
 */
typedef void           LtVoid ;

typedef char           LtInt8 ;
typedef unsigned char  LtInt8U ;

typedef short          LtInt16 ;
typedef unsigned short LtInt16U ;

typedef int            LtBoolean ;
typedef int            LtInt32 ;
typedef unsigned int   LtInt32U ;

typedef float          LtFloat ;

/**
 */
typedef void *         LtImage ;

/**
 */
LLIIO_API
LtImage LiOpen( const char * szPath ) ;

/**
 */
LLIIO_API
LtInt32 LiGetWidth( const LtImage pI ) ;

/**
 */
LLIIO_API
LtInt32 LiGetHeight( const LtImage pI ) ;

/**
 */
enum
{
    LLIIO_RGB8 = 1,
    LLIIO_RGBA8 ,
    LLIIO_RGB16 ,
    LLIIO_RGBA16 ,
    LLIIO_RGB32 ,
    LLIIO_RGBA32 ,
    LLIIO_RGB32F ,
    LLIIO_RGBA32F ,
};

/**
 */
LLIIO_API
LtInt32 LiGetBPP( const LtImage pI ) ;

/**
 */
LLIIO_API
LtInt8U * LiRead( const LtImage pI ) ;

/**
 */
LLIIO_API
LtImage LiCreate( LtInt32 iBPP , LtInt32 iW , LtInt32 iH , const LtInt8U * pData ) ;

/**
 */
LLIIO_API
LtBoolean LiSave( const LtImage pI , const char * szPath ) ;

/**
 */
LLIIO_API
LtVoid LiClose( LtImage * ppI ) ;

#ifdef __cplusplus
}
#endif
